

#include <stdio.h>

//int main()
//{
//	printf("%d\n", sizeof(float));
//
//	return 0;
//}


//#include <string.h>
//#include <assert.h>
//#include <stdlib.h>
//char* compressString(char* S)
//{
//    if (!*S)
//        return S;
//
//    int sz = strlen(S);
//    int a[128] = { 0 };
//    for (int i = 0; i < sz; ++i)
//    {
//        a[S[i]]++;
//    }
//
//    char* ans = (char*)calloc(50001, sizeof(char));
//    assert(ans);
//
//    int index = 0;
//    char prev = 0;
//    for (int i = 0; i < sz; ++i)
//    {
//        ans[index++] = S[i];
//
//        if (prev == S[i])
//        {
//            prev = S[i];
//
//            if (a[S[i]] > 1 && a[S[i]] < 10)
//            {
//                ans[index++] = a[S[i]];
//            }
//            else if (a[S[i]] > 1 && a[S[i]] < 100)
//            {
//                ans[index++] = a[S[i]] / 10;
//                ans[index++] = a[S[i]] % 10;
//            }
//            else if (a[S[i]] > 1 && a[S[i]] < 1000)
//            {
//                ans[index++] = a[S[i]] / 100;
//                ans[index++] = a[S[i]] / 10 % 10;
//                ans[index++] = a[S[i]] % 10;
//            }
//            else if (a[S[i]] > 1 && a[S[i]] < 10000)
//            {
//                ans[index++] = a[S[i]] / 1000;
//                ans[index++] = a[S[i]] / 100 % 10;
//                ans[index++] = a[S[i]] / 10 % 10;
//                ans[index++] = a[S[i]] % 10;
//            }
//            else
//            {
//                ans[index++] = a[S[i]] / 10000;
//                ans[index++] = a[S[i]] / 1000 % 10;
//                ans[index++] = a[S[i]] / 100 % 10;
//                ans[index++] = a[S[i]] / 10 % 10;
//                ans[index++] = a[S[i]] % 10;
//            }
//        }
//        else
//        {
//            continue;
//        }
//    }
//
//    if (strlen(ans) >= sz)
//        return S;
//    else
//        return ans;
//
//}
//
//int main()
//{
//    char* s = "aabcccccaaa";
//
//    printf("%s\n", compressString(s));
//
//    return 0;
//}

#include <string.h>
#include <assert.h>
#include <stdlib.h>
void _Cnt(char** str, int n)
{
    int cnt = 0, tmp = n;
    while (tmp)
    {
        cnt++;
        tmp /= 10;
    }

    tmp = cnt;
    *str = *str + tmp - 1;
    while (tmp--)
    {
        **str = n % 10 + '0';
        (*str)--;
        n /= 10;
    }
    *str = *str + cnt + 1;
}


char* compressString(char* S) {
    if (!*S)
        return S;

    size_t sz = strlen(S);
    char* ans = (char*)calloc(sz * 2 + 1, sizeof(char));
    assert(ans);

    char* cur = S, * tmp = ans, * src = S;
    while (*src)
    {
        *tmp = *src;
        tmp++;
        cur++;

        int cnt = 1;
        while (*cur == *src)
        {
            cnt++;
            cur++;
        }
        _Cnt(&tmp, cnt);

        src = cur;
    }

    if (strlen(ans) >= sz)
        return S;
    else
        return ans;
}


int main()
{
    char* s = "abbccd";

    printf("%s\n", compressString(s));

	return 0;
}